Enterprises are looking at ways of reducing costs and increasing efficiencies of their data processing system. A typical enterprise data processing system allocates individual resources for each of the enterprise's applications. Enough resources are acquired for each application to handle the estimated peak load of the application. Each application has different load characteristics; some applications are busy during the day; some others during the night; some reports are run once a week and some others once a month. As a result, there is a lot of resource capacity that is left unutilized. Grid computing enables the utilization or elimination of this unutilized capacity. In fact, grid computing is poised to drastically change the economics of computing.
A grid is a collection of computing elements that provide processing and some degree of shared storage; the resources of a grid are allocated dynamically to meet the computational needs and priorities of its clients. Grid computing can dramatically lower the cost of computing, extend the availability of computing resources, and deliver higher productivity and higher quality. The basic idea of grid computing is the notion of computing as a utility, analogous to the electric power grid or the telephone network. A client of the grid does not care where its data is or where the computation is performed. All a client wants is to have computation done and have the information delivered to the client when it wants.
This is analogous to the way electric utilities work; a customer does not know where the generator is, or how the electric grid is wired. The customer just asks for electricity and gets it. The goal is to make computing a utility—a ubiquitous commodity. Hence it has the name, the grid.
This view of grid computing as a utility is, of course, a client side view. From the server side, or behind the scenes, the grid is about resource allocation, information sharing, and high availability. Resource allocation ensures that all those that need or request resources are getting what they need. Resources are not standing idle while requests are left unserviced. Information sharing makes sure that the information clients and applications need is available where and when it is needed. High availability ensures that all the data and computation must always be there—just as a utility company must always provide electric power.
Grid Computing for Databases
One area of computer technology that can benefit from grid computing is database technology. A grid can support multiple databases and dynamically allocate and reallocate resources as needed to support the current demand for each database. As the demand for a database increases, more resources are allocated for that database, while other resources are deallocated from another database. For example, on an enterprise grid, a database is being serviced by one database server running on one server blade on the grid. The number of users requesting data from the database increases. In response to this increase in the demand for the database, a database server for another database is removed from one server blade and a database server for the database experiencing increased user requests is provisioned to the server blade.
Grid computing for databases can require allocation and management of resources at different levels. At a level corresponding to a single database, the performance and availability of resources provided to the users of the database must be monitored and resources of the database allocated between the users to ensure performance and resource availability goals for each of the users are met. Between databases, the allocation of a grid's resources must be managed to ensure that performance and resource availability goals for users of all the databases are met. The work to manage allocation of resources at these different levels and the information needed to perform such management is very complex. Therefore, there is a need for a mechanism that simplifies and efficiently handles the management of resources in a grid computing system for database systems as well as other types of systems that allocate resources at different levels within a grid.
One such mechanism is the system described in Hierarchical Management of the Dynamic Allocation of Resources in a Multi-Node System (50277-2382), which uses a hierarchy of directors to manage resources at different levels. One type of director, a database director, manages resources allocated to a database among users of the database. For example, a grid may host a group of database servers for a database. Each database server in the group is referred to as a database instance. Each database instance hosts a number of database sessions for users and one or more services. The database director manages the allocation of resources available to a database among users and services.
A service is work of a particular type or category that is hosted for the benefit of one or more clients. The work performed as part of a service includes any use or expenditure of computer resources, including, for example, CPU processing time, storing and accessing data in volatile memory, reads and writes from and to persistent storage (i.e. disk space), and use of network or bus bandwidth. A service may be, for example, work that is performed for a particular application on a client of a database server.
For a database, a subset of the group of database instances is allocated to provide a particular service. A database instance allocated to provide the service is referred to herein as hosting the service. A database instance may host more than one service. A service hosted by a database instance of a database is referred to herein as being hosted by the database.
The performance and availability of resources realized by a service hosted by a database may at times not meet requirements for performance and availability of resources. When this situation occurs, another database instance and a node to host the database instance may be allocated within the grid to the database. Often, the only pool of nodes available to allocate to the database are already being used for other databases and services. Allocating the node to the database thus requires de-allocating the node from another database, which impacts the performance and availability of resources realized by the services hosted on the other database.
Based on the foregoing, it is desirable to have an approach that de-allocates a node from a pool of nodes already allocated to a set of databases in a way that accounts for and accommodates the performance and resource availability for the users of services hosted by the set of databases.
Approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.